﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Web.Models;
using Web.Repositories;

namespace Web.Controllers
{
    public class HabitacionController : Controller
    {
        CategoriaRepository categoriaRepository = new CategoriaRepository();
        HabitacionRepository habitacionRepository = new HabitacionRepository();
        //
        // GET: /Habitacion/

        [Authorize]
        public ActionResult EditarView(int idHabitacion)
        {
            var model = habitacionRepository.GetHabitacion(idHabitacion);
            ViewBag.Categorias = categoriaRepository.GetAll();
            if (ViewBag.Categorias.Count > 0)
            {
                return View(model);
            }
            string noCategoriasError = "Por favor cree una categoria para poder editar esta habitacion.";
            return Redirect(Url.Action("Error", "Home", new { error = noCategoriasError, volver = Url.Action("VerHabitaciones", "Admin") }));            
        }

        [Authorize]
        public ActionResult Editar(int idHabitacion)
        {
            Habitacion habitacion = habitacionRepository.GetHabitacion(idHabitacion);
            Categoria categoriaVieja = categoriaRepository.GetCategoriaPorHabitacion(idHabitacion);

            habitacion.NumeroHabitacion = Request["txtNumero"];
            habitacion.Piso = Request["txtPiso"];
            Categoria categoriaNueva = categoriaRepository.GetCategoria(int.Parse(Request["selCategorias"]));
            habitacion.Capacidad = Request["txtCapacidad"];
            habitacion.NombreCategoria = categoriaNueva.Nombre;

            if (categoriaVieja != null)
            {
                categoriaVieja.Habitaciones.Remove(habitacion);
            }
            categoriaNueva.Habitaciones.Add(habitacion);

            categoriaRepository.Save();
            habitacionRepository.Save();

            return Redirect(Url.Action("VerHabitaciones", "Admin"));
        }

        [Authorize]
        public ActionResult CrearHabitacionView()
        {
            ViewBag.Categorias = categoriaRepository.GetAll();
            if (ViewBag.Categorias.Count > 0)
            {
                return View();
            }
            string noCategoriasError = "Por favor cree una categoria antes de crear una habitacion";
            return Redirect(Url.Action("Error", "Home", new { error = noCategoriasError, volver = Url.Action("VerHabitaciones", "Admin") }));
        }

        [Authorize]
        public ActionResult CrearHabitacion()
        {
            string numero = Request["txtNumero"];
            string piso = Request["txtPiso"];
            int idCategoria = int.Parse(Request["selCategorias"]);
            string capacidad = Request["txtCapacidad"];

            var categoria = categoriaRepository.GetCategoria(idCategoria);
            Habitacion alta = new Habitacion(numero, piso, capacidad, categoria.Nombre);

            habitacionRepository.AltaHabitacion(alta);

            categoria.Habitaciones.Add(alta);
            categoriaRepository.Save();

            

            return Redirect(Url.Action("VerHabitaciones", "Admin"));
        }

        [Authorize]
        public ActionResult Eliminar(int idHabitacion)
        {
            var baja = habitacionRepository.GetHabitacion(idHabitacion);
            habitacionRepository.BajaHabitacion(baja);
            return Redirect(Url.Action("VerHabitaciones", "Admin"));
        }
    }
}
